package main

import (
	"image"
	"log"

	"github.com/fogleman/gg"
)

func main() {
	const (
		width  = 900
		height = 500
	)

	dc := gg.NewContext(width, height)

	// 设置背景颜色
	dc.SetRGB(155.0/255.0, 89.0/255.0, 182.0/255.0)
	dc.Clear()

	// 设置字体
	if err := dc.LoadFontFace("QingNiaoHuaGuangJianMeiHei-2.ttf", 24); err != nil {
		panic(err)
	}

	// 设置文本颜色
	dc.SetRGB(0, 0, 0)

	// 	// 加载Logo图片
	logo, err := gg.LoadImage("logo.png") // 替换为你的Logo图片路径
	if err != nil {
		log.Fatalf("无法加载Logo图片: %v", err)
	}

	// 调整Logo大小（可选）
	logo = resizeLogo(logo, 100, 100) // 调整Logo大小为100x100

	// 在左上方绘制Logo
	dc.DrawImage(logo, 50, 20) // Logo距离左边和上边各20像素

	// 绘制标题
	dc.DrawString("某市某地区通行证输通行证", 300, 50)

	// 绘制编号
	dc.DrawString("NO.202503060003", 600, 100)

	// 绘制有效运输时间
	dc.DrawString("有效运输时间：2025-03-05 08:02:46 - 2025-03-30 08:02:00", 50, 150)

	// 绘制报备人信息
	dc.DrawString("申请人姓名：xvwen", 50, 200)
	dc.DrawString("申请人手机号：1234567890", 50, 230)

	// 绘制小程序扫码
	wechat, err := gg.LoadImage("wechat.png") // 替换为你的Logo图片路径
	if err != nil {
		log.Fatalf("无法加载Wechat图片: %v", err)
	}
	// 调整Wechat大小（可选）
	wechat = resizeWechat(wechat, 200, 200)
	dc.DrawImage(wechat, 650, 150)

	// 绘制运输企业信息
	dc.DrawString("申请企业：某某运输服务有限公司（运输）", 50, 270)

	// 绘制运输车辆信息
	dc.DrawString("申请车牌号：汉B25165", 50, 300)

	// 绘制运输核准证编号
	dc.DrawString("申请编号：PF469004000300001", 50, 330)

	// 绘制项目名称
	dc.DrawString("项目名称：某某市文汇小学项目", 50, 360)

	// 绘制项目位置
	dc.DrawString("项目位置：某省某市某区长沙路西侧(文汇幼儿园西侧)", 50, 390)

	// 绘制处置企业信息
	dc.DrawString("运输地点：某部某建筑物及新建工程项目处理点", 50, 420)

	// 绘制底部信息
	dc.DrawString("某市监管部门", 600, 470)

	// 保存图像
	dc.SavePNG("output.png")
}

func resizeLogo(img image.Image, width, height int) image.Image {
	dc := gg.NewContext(width, height)
	dc.ScaleAbout(float64(width)/float64(img.Bounds().Dx()), float64(height)/float64(img.Bounds().Dy()), float64(width)/70, float64(height)/70)
	dc.DrawImage(img, 0, 0)
	return dc.Image()
}

func resizeWechat(img image.Image, width, height int) image.Image {
	dc := gg.NewContext(width, height)
	dc.ScaleAbout(float64(width)/float64(img.Bounds().Dx()), float64(height)/float64(img.Bounds().Dy()), float64(width)/1000, float64(height)/1000)
	dc.DrawImage(img, 0, 0)
	return dc.Image()
}
